package com.haixiaoke.saas.tenant.service;

import com.haixiaoke.saas.common.core.domain.AjaxResult;
import com.haixiaoke.saas.tenant.domain.Tenant;
import com.haixiaoke.saas.tenant.domain.TenantTree;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 机构信息Service接口
 *
 * @author panda
 * @date 2023-12-26
 */
public interface ITenantService {
    /**
     * 查询机构信息
     *
     * @return 机构信息
     */
    Tenant selectDepartmentByDepId(String tenantId);

    /**
     * 查询机构信息列表
     *
     * @param department 机构信息
     * @return 机构信息集合
     */
    List<Tenant> selectDepartmentList(Tenant department);

    /**
     * 新增机构信息
     *
     * @param department 机构信息
     * @return 结果
     */
    AjaxResult insertDepartment(Tenant department);

    /**
     * 修改机构信息
     *
     * @param department 机构信息
     * @return 结果
     */
    int updateDepartment(Tenant department);

    /**
     * 批量删除机构信息
     *
     * @param depIds 需要删除的机构信息主键集合
     * @return 结果
     */
    int deleteDepartmentByDepIds(String[] depIds);

    /**
     * 删除机构信息
     *
     * @param depId 机构信息主键
     * @return 结果
     */
    int deleteDepartmentByDepId(String depId);

    Tenant getElectronicVisaInfo(String tenantId);

    /**
     * 修改机构信息
     *
     * @param department
     * @return
     */
    AjaxResult manageUpdateDepartment(Tenant department);

    /**
     * 根据机构id查询详细信息
     *
     * @param tenantId
     * @return
     */
    Tenant selectDepByDepId(String tenantId);

    /**
     * 设置机构权限菜单
     */
    int editMenuByDep(Tenant department);

    /**
     * 根据用户id查询机构集合
     *
     * @param userId
     * @return
     */
    List<Tenant> selectDepByUserId(Long userId);

    /**
     * 检测企业限制人数是否已达到最大
     *
     * @param depId
     * @return
     */
    boolean checkPopulation(String depId);

    int updateTenant(Tenant tenant);

    List<String> selectAncestorsByTenantId(String tenantId);

    List<TenantTree> buildTreeList(Tenant tenant);

    AjaxResult editTenantState(String tenantId, String username);

    AjaxResult editBillState(String tenantId, String username);
}
